3D数学基础:图形与游戏开发
向量
向量点乘
公式:a*b = |a||b|cosθ
几何意义:
(1) 判断前后
(2) 投影
用矩阵表示:
向量叉乘
公式:|a×b| = |a||b|sinθ
几何意义:
(1) 判断左右
(2) 计算垂直a,b所形成平面的向量,该向量的朝向由左手定则(左手坐标系),右手定则(右手坐标系)决定
用矩阵表示:
矩阵
矩阵转置(M(T)):通俗解释,行变列,列变行
矩阵乘法
矩阵变换过程
(1)v=(x,y,z) 拆解成v=xp+yq+zr,p,q,r为一个坐标系的+x轴,+y轴,+z轴的单位向量
(2)其(p,q,r)可以拆分为一个33矩阵即
(3)矩阵变换相当于 变换矩阵列向量=新的向量旋转矩阵
(1) 2D旋转矩阵
(2) 3D绕正坐标轴旋转与2D同样
(3) 3D绕任意轴旋转缩放矩阵
(1) 三轴的缩放因子kx,ky,kz 乘对应的p,q,r即是缩放矩阵
(2) 沿任意轴缩放矩阵
(3) 关于沿任意轴缩放矩阵因子k的特殊解释:
k=-1:镜像,n相当于平面法向量
k=0:投影,n相当于平面法向量
k>0:普通缩放切变 (扭曲变换)
一个/多个轴的坐标被另外一个轴以及一个/多个系数影响,2D切变如:将y乘因子s再加到x轴上,x’ = x + y*s。可以解释为,切变y轴,因子s,x轴受y轴切变影响行列式 (矩阵M的行列式表示为:|M|)
余子式 (M(ij)表示从M矩阵中去掉第 i 行以及第 j 列后剩余的矩阵)
代数余子式
行列式性质
(1).|A*B|=|A||B|
(2).|M(T)|=|M| 注:M(T)为M的转置
(3).矩阵任意行或列都为零,则行列式为零
(4).交换矩阵的任意两行或两列,行列式变负
(5).任意行或列的非零积加到另一行或列上,行列式值不变
(6).行列式的值=2D中的面积,3D中的体积矩阵的逆 M(-1)
矩阵的逆 公式: “标准伴随矩阵” / 行列式 = 矩阵的逆正交矩阵 (通常表示为Q)
M * M(T) = I,M * M(-1) = I,M(T) = M(-1)
(1)M(T),M(-1)也为正交矩阵
(2)|M| = +1或-1
(3)M(T)各行为单位向量且两两相交
几何意义:在已知该矩阵为正交矩阵的前提下,求矩阵的逆只需要求矩阵的转置而不用复杂计算。
在坐标转换中旋转矩阵都是正交矩阵4X4齐次矩阵
平移是一个特殊的变换矩阵,在3X3矩阵中无法表示,因此添加了一个唯独存放平移信息,其中W分量为1表示向量,而W分量为0表示点
欧拉角
- 比较常见的表达旋转的方式,用三个旋转角度表示当前的旋转值,分别对应:绕x,y,z轴旋转度数。
- 优点:表达简单易懂,任意3个数表示欧拉角都是有效的
- 缺点:插值困难,如+190°与-170°实际表现是一样的但是普通插值会造成360°以上的旋转,旋转中某种特殊情况会出现万向锁问题
四元数
- Q = [w v] = [w x y z]
- 单位四元数:Q = [1 0]
- 带入角度以及旋转轴:
- 四元数的模
- 四元数的共轭:q(*) ,向量变负
- 四元数的逆:q(-1) * q = [1 0] (单位四元数),由共轭除以模获得
- 四元数的乘法(叉乘):(满足乘法结合律,不满足交换律)
- 使用四元数旋转
标准3D坐标(x,y,z)转成p=[0 (x,y,z)],q为旋转矩阵:[cos(θ/2) n*sin(θ/2)]
再通过以下公式
由右向左旋转:
由左向右旋转: - 四元数的差:计算四元数’a’旋转到’b’的角位移,用’d’表示 a*d = b ,同时左乘一个a的逆(四元数不支持除法)
- 四元数点乘 几何意义:a·b的绝对值越大,说明a与b角位移越相似
- 四元数求幂:(比较常用)
一个四元数q(1/3) 表示1/3的q的角位移; q(2):两倍q的角位移
几何图元
- 自由度概念:自由度是决定一个图元可用的最少参数。 如:球:半径,矩形:长,宽,高
- 边界球检测相交
- AABB包围盒检测相交:矩形的边于世界坐标系平行,满足相交条件Xmin <= X <= Xmax , Ymin <= Y <= Ymax , Zmin <= Z <= Zmax
关于AABB包围盒的变换,当物体变换时,并不能直接设置AABB盒子(旋转等,盒子大小会变化),而需要重新计算 - 点到平面的距离计算:取平面任意一点,得向量a以及于平面的夹角θ,sinθ*|a|即最短距离
- 三角形面积计算:1.bh/2 ,2.海伦公式(在不知道高的情况下):
- 三角形重心,内心,外心计算, 重心:三角形平衡点,内心:到三条边距离相等,外心:到三个顶点距离相等
- 证明点在三角形内部,只需要用三角形的三个点于点P的向量分别于其三条边的向量做叉乘,求得点P在边的左侧或右侧,但三条边都在内部则点P在三角形内部